什么是 TCP 連接管理
TCP是面向連接的協議,因此每個TCP連接都有三個階段:連接建立、數據傳送和連接釋放。TCP連接的管理就是使運輸連接的建立和釋放都能正常進行。在TCP連接建立的過程中,要解決以下三個問題:要使每一方都能確知對方的存在。要允許雙方協商一些參數(如最大窗口值、是否使用窗口擴大選項、時間戳選項以及服務質量等)。能夠對運輸實體資源(如緩存大小、連接表中的項目等)進行分配。
TCP把連接作為最基本的抽象,每條TCP連接有兩個端點。TCP連接的端點不是主機,不是主機的IP地址。不是應用進程,也不是傳輸層的協議端口。TCP連接的端口稱為套接字(socket)或插口。端口拼接到IP地址上即為套接字。
每條TCP連接唯一的被通信兩端的兩個端點(即兩個套接字)確定。TCP連接的建立采用客戶/服務器方式。主動發起連接建立的應用進程稱為客戶機(Client),而被動等待連接建立的應用進程稱為服務器(Server)。
TCP連接釋放的過程通常稱為四次握手:
第一步:客戶機打算關閉連接時,向其TCP發送一個連接釋放的報文段,并停止發送數據,主動關閉TCP連接,該報文段的FIN標志位被置為1,seq=u,它等于前面已傳送過的數據的最后一個字節的序號+1(FIN報文段即使不攜帶數據,也要消耗一個序號)。TCP是全雙工的,即可以想象為一條TCP連接上有兩條數據通路。發送FIN報文時,發送FIN的一端不能再發送數據,即關閉了其中一條通路,但對方還可以發送數據。
第二步:服務器收到連接釋放報文段后即發出確認,確認號是ack=u+1,而這個報文段自己的序號為v,等于它前面已傳送過的數據的最后一個字節的序號加1.此時,從客戶機到服務器這個方向的連接就釋放了,TCP連接處于半關閉狀態,但服務器若發送數據,客戶器仍要接收,即從服務器到客戶機這個方向的連接并未關閉。
第三步:若服務器已經沒有要向客戶機發送的數據,就通知TCP釋放連接,此時其發出FIN=1的連接釋放報文段
第四步:客戶機收到連接釋放報文段后,必須發出確認。在確認報文段中,ACK字段被置為1,確認號是ack=w+1,序號是seq=u+1,此時TCP連接還未釋放,必須經過時間等待計數器設置的時間2MSL后,A才能進入連接關閉的狀態。